//该项目的版本是node12，有时候import引入不进去，就会用const替代
import { defineConfig, loadEnv } from 'vite';
//defineConfig是一个工具函数，不用 jsdoc 注解也可以获取类型提示
//加载环境变量（loadEnv）,loadEnv接收三个参数，第一个是.env后面的名字，第二个是绝对路径，第三个参数是你环境变量名的前缀，在vite中默认是VITE_。比如loadEnv(‘abc’, process.cwd(), 'ENV');

//引入vite扩展插件
// const { createVuePlugin } = require('vite-plugin-vue2');
// const vitePluginHtmlConfig = require('vite-plugin-html-config');
// const { viteExternalsPlugin } = require('vite-plugin-externals');
import path from 'path';
// import cdnConfig from './cdn.config';

const resolve = (dir: string) => path.resolve(__dirname, dir);

export default defineConfig(({ command, mode }) => {
  const envParams = loadEnv(mode, __dirname);//__dirname表示当前文件所处目录
  return {
    root: resolve('./'), //  入口index.html，注意入口js应该与index.html 同一目录下（只能写到目录，不能写到具体文件）
    base: './',
    publicDir: resolve('static'),//静态资源文件夹
    resolve: {
      alias: {
        '@': resolve('src'),//作为 entries 的选项
      },
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    },

    // 反向代理
    server: {
      host: '0.0.0.0', //服务器ip地址
      port: 5566, //本地端口
      fs: {
        strict: false, //  支持引用除入口目录的文件
      },
      // open: true, // 是否自动在浏览器打开
      proxy: {
        '/szapi': {
          target: 'https://tradesz.test.api.qywgpo.com/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/szapi/, ''),
        },
      },
    },

    plugins: [
      // createVuePlugin(),
      //  打包babel编译
      // vitePluginHtmlConfig(cdnConfig.getCdnConfig()), //  使用cdn，传入分支参数判断使用哪种环境的js
      // viteExternalsPlugin(cdnConfig.externals), // 打包过滤被引入cdn的包
    ],
    build: {
      //打包环境移除console.log，debugger
      minify: 'terser',
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true,
        },
      },
      //打包文件按照类型分文件夹显示
      rollupOptions: {
        input: {
          main: path.resolve(__dirname, 'index.html'),
        },
        output: {
          chunkFileNames: 'js/[name]-[hash].js',
          entryFileNames: 'js/[name]-[hash].js',
          assetFileNames: '[ext]/[name]-[hash].[ext]',
        },
      },
    },
  };
});


